// 用户数据模块,

import { removeToken, setToken, getToken, setTimeStamp } from '@/utils/auth'
import { login, getInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
const state = {
  token: getToken(),
  userInfo: {} // 这里赋值为{}方便getters获取值，避免不必要的报错。
}

const mutations = {
  // 将数据设置给Vuex,将数据同步给本地
  setVuexToken(state, token) {
    state.token = token
    setToken(token)
  },
  // 删除Vuex中保存的数据,并保持本地同步
  removeVuexToken(state) {
    state.token = null
    removeToken()
  },
  setUserInfo(state, result) {
    state.userInfo = result // 对象的重新赋值为响应式
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

const actions = {
  async userlogin(context, data) {
    const result = await login(data)
    // 成功会直接在拦截器中抛出date
    context.commit('setVuexToken', result)
    setTimeStamp()
  },
  async getUserInfo(context) {
    const result = await getInfo() // 用户信息
    const baseInfo = await getUserDetailById(result.userId) // 通过用户ID获取当前用户的员工信息
    context.commit('setUserInfo', { ...result, ...baseInfo })
    return result // 权限需要只需要result内容
  },
  logout(context) {
    context.commit('removeVuexToken')
    context.commit('removeUserInfo')
    resetRouter() // 重置路由
    // 将权限模块中设置路由的数据置空 子模块之间的调用，传入第三个{root:true} 标识此时的调用为根级的
    context.commit('permission/setRoutes', [], { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
